package com.zuipin.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.zuipin.entity.SysMenu;
import com.zuipin.util.Pagination;
import com.zuipin.vo.MenuTreeNode;

/**
 *  菜单mapper
  * @ClassName: SysMenuMapper
  * @Description: TODO
  * @author robot
  * @date 2017年09月147日 09:21:08
  *
 */
@Mapper
public interface SysMenuMapper {
	/**
	  * 查询菜单
	  * @Title: findById
	  * @author robot
	  * @date 2017年09月147日 09:21:08
	  * @param id,
	  * @return
	  * @return SysMenu
	 */
	public SysMenu findById(Long id);
	
	/**
	  * 插入菜单操作
	  * @Title: insert
	  * @author robot
	  * @date 2017年09月147日 09:21:08
	  * @param sysMenu
	  * @return void
	 */
	public void insert(SysMenu sysMenu);
	
	/**
	  *  更新菜单操作
	  * @Title: update
	  * @author robot
	  * @date 2017年09月147日 09:21:08
	  * @param sysMenu
	  * @return void
	 */
	public void update(SysMenu sysMenu);
	
	/**
	  * 删除菜单
	  * @Title: delete
	  * @author robot
	  * @date 2017年09月147日 09:21:08
	  * @param id,
	  * @return void
	 */
	public void delete(Long id);
	
	/**
	 * 搜索菜单, 并自动分页
	  *  @Title: seachSysMenu
	  * @author robot
	  * @date 2017年09月147日 09:21:08
	  * @param sysMenu
	  * @param page
	  * @return
	  * @return List<SysMenu>
	 */
	public List<SysMenu> seachSysMenu(@Param("sysMenu") SysMenu sysMenu, @Param("page") Pagination page);
	
	/**
	 * 通过角色ID查询对应的菜单权限
	 * @param roleId
	 */
	public List<SysMenu> findByRoleId(@Param("roleId") Long roleId, @Param("status") Integer status);
	
	/**
	 * 查询菜单树
	 * @Title: seachMenuChilds
	 * @author chenjunjie
	 * @param menuId 父菜单ID
	 * @param roleId 角色ID
	 * @param userId 用户ID
	 * @param sysId 系统ID,0:代表通用
	 * @param searchMode=0 只查询出有权限的模块（菜单） searchMode=1 查询所有模块（菜单），有权限hasPermission=1，无权限hasPermission=0 
	 * @return
	 */
	public List<MenuTreeNode> queryMenus(@Param("menuId") Long menuId, @Param("menuLevel") Integer menuLevel, @Param("roleId") Long roleId, @Param("userId") Long userId,
			@Param("sysId") Long sysId, @Param("searchMode") Integer searchMode);
	
	/**
	 * 按角色删除菜单权限
	 * @param roleId
	 */
	public void deleteMenuPermissionByRole(@Param("roleId") Long roleId);
	
	/**
	 * 根据父ID查询子模块
	 * @param sysId 
	 * @param roleId
	 */
	public List<SysMenu> queryMenuByParent(@Param("menuId") Long menuId, @Param("sysId") String sysId, @Param("isCommon") Integer isCommon);
	
}